import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import ipywidgets as widgets
from maux import hide_interactive_toolbars
hide_interactive_toolbars()
Matplotlib je Pythonovská knižnica, ktorá je určená pre kreslenie 2D/3D diagramov.
Ďalšie informácie:
Doporučená konvencia pre importovanie modulu matplotlib
:
>>> %matplotlib notebook
>>> import matplotlib.pyplot as plt
Magický príkaz pre IPython %matplotlib notebook
integruje knižnicu Matplotlib s webovým prostredím Jupyter Notebook.
Dokumentácia:
Nakreslenie grafu jednoduchej funkčnej závislosti, ktorý odpovedá množine usporiadaných dvojíc $\{(1,3), (2,6), (3,5), (4,0)\}$.
Dokumentácia:
#####
##### nakreslenie grafu funkcie
#####
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
## pomenovanie diagramu
ax.set_title(r"Graf funkcie")
## nastavenie rovnakej mierky pre obe osi
ax.set_aspect('equal')
## graf funkcie
ax.plot([1, 2, 3, 4], [3, 6, 5, 0], color='red', linestyle='', marker='o')
# ax.plot([1, 2, 3, 4], [3, 6, 5, 0], c='r', ls='', marker='o') # to isté
# ax.plot([1, 2, 3, 4], [3, 6, 5, 0], 'ro') # to isté
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
To isté ako v predchadzajúcom príklade, len je to zapísané iným spôsobom.
#####
##### nakreslenie grafu funkcie
#####
#### vstupné údaje
X = np.array([1, 2, 3, 4]) # hodnoty nezávislej premennej
Y = 9 * X - 2 * X ** 2 - 4 # odpovedajúce hodnoty závislej premennej,
# ekvivalentné príkazu Y = np.array([3, 6, 5, 0])
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
## pomenovanie diagramu
ax.set_title(r"Graf funkcie")
## nastavenie rovnakej mierky pre obe osi
ax.set_aspect('equal')
## graf funkcie
ax.plot(X, Y, 'ro')
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
To isté ako v predchadzajúcich príkladoch, len tentokrát súradnice každého bodu grafu sú explicitne vyznačené.
Dokumentácia:
#####
##### nakreslenie grafu funkcie
#####
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
## pomenovanie diagramu
ax.set_title(r"Graf funkcie")
## nastavenie rovnakej mierky pre obe osi
ax.set_aspect('equal')
## graf funkcie
ax.plot(1, 3, 'ro')
ax.annotate(r"$[1,3]$", xy = (1, 3), va='bottom')
ax.plot(2, 6, 'ro')
ax.annotate(r"$[2,6]$", xy = (2, 6), va='top')
ax.plot(3, 5, 'ro')
ax.annotate(r"$[3,6]$", xy = (3, 5), va='bottom')
ax.plot(4, 0, 'ro')
ax.annotate(r"$[4,0]$", xy = (4, 0), va='bottom', ha='right')
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
To isté ako v predchadzajúcich príkladoch, len tentokrát súradnice každého bodu grafu sú implicitne určené pravoúhlou sieťou.
Dokumentácia:
#####
##### nakreslenie grafu funkcie
#####
#### vstupné údaje
X = np.array([1, 2, 3, 4]) # hodnoty nezávislej premennej
Y = 9 * X - 2 * X ** 2 - 4 # odpovedajúce hodnoty závislej premennej,
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
## pomenovanie diagramu
ax.set_title(r"Graf funkcie")
## nastavenie rovnakej mierky pre obe osi
ax.set_aspect('equal')
## pravoúhla sieť
ax.grid()
## graf funkcie
ax.plot(X, Y, 'ro')
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
Obrázok s grafmi dvoch funkcií v tom istom diagrame.
#####
##### nakreslenie grafov dvoch funkcií v tom istom diagrame
#####
#### vstupné údaje
X = np.array([1, 2, 3, 4]) # hodnoty nezávislej premennej
Y1 = 9 * X - 2 * X ** 2 - 4 # hodnoty závislej premennej pre 1. funkciu
Y2 = 5 - X # hodnoty závislej premennej pre 2. funkciu
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
## pomenovanie diagramu
ax.set_title(r"Grafy dvoch funkcií")
## nastavenie rovnakej mierky pre obe osi
ax.set_aspect('equal')
## dva grafy v jednom diagrame
ax.plot(X, Y1, 'r-o')
ax.plot(X, Y2, 'b:s', mfc='w')
# ax.plot(X, Y1, 'r-o', X, Y2, 'b:s', mfc='w') # alternatívny zápis
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
Nasledujúci obrázok obsahuje kružnicu so stredom v bode $[1,2]$ a polomerom $3$. Všeobecné vyjadrenie kružnice má tvar $$(x-1)^2+(y-2)^2 = 3^2$$ Parametrické vyjadrenie kružnice má tvar $$ x = 1 + 3 \cos t \\ y = 2 + 3 \sin t $$ kde $t \in \langle 0,2\pi \rangle$ je parameter.
Pokyny. Nakreslite do toho istého obrázka niekoľko kružníc s iným stredom resp. s iným polomerom.
Dokumentácia:
#####
##### nakreslenie kružnice
#####
#### vstupné údaje
T = np.linspace(0, 2 * np.pi, 100) # interval hodnôt parametra
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
## pomenovanie diagramu
ax.set_title(r"Kružnica so stredom v bode $[1,2]$ a polomerom $3$")
## nastavenie rovnakej mierky pre obe osi
ax.set_aspect('equal')
## pravoúhla sieť
ax.grid()
## ohraničenie hodnôt pre obe osi
ax.set_xlim(-3, 5) # ohraničenie hodnôt pre os x
ax.set_ylim(-2, 6) # ohraničenie hodnôt pre os y
## stred kružnice
ax.plot(1, 2, 'o', label=r"stred kružnice")
## samotná kružnica
ax.plot(1 + 3 * np.cos(T), 2 + 3 * np.sin(T), label=r"kružnica")
## legenda
ax.legend()
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
#fig.show()
<matplotlib.legend.Legend at 0x7f979e7e3f70>
Nakreslenie niekoľkých kružníc
$$(x-a)^2+(y-b)^2 = r^2$$
pre vybrané hodnoty parametrov $a,b,r$.
Parametrické vyjadrenie kružníc má tvar
$$ x = a + r \cos t \\ y = b + r \sin t $$
kde $t \in \langle 0,2\pi \rangle$ je parameter.
Vykreslenie sa deje pomocou interaktívnych prvkov knižnice ipywidgets
.
Dokumentácia:
Doporučená konvencia pre importovanie modulu ipywidgets
:
>>> import ipywidgets as widgets
#####
##### nakreslenie parametrického systému kružníc (interaktívna verzia)
#####
#### vstupné údaje
T = np.linspace(0, 2 * np.pi, 100) # interval hodnôt parametra
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 6)
### diagram
ax.grid()
ax.set_xlim(-8, 8)
ax.set_ylim(-8, 8)
## graf kružnice (x-a)²+(y-b)² = r²
def plot_circle(a, b, r):
ax.set_title(r"Kružnica so stredom $[{},{}]$ a polomerom ${}$".format(a, b, r))
if ax.lines:
ax.lines[0].set_data(a, b)
ax.lines[1].set_data(a + r * np.cos(T), b + r * np.sin(T))
else:
ax.plot(a, b, 'o')
ax.plot(a + r * np.cos(T), b + r * np.sin(T))
widgets.interact(plot_circle,
a=widgets.FloatSlider(min=-2, max=2, value=0),
b=widgets.FloatSlider(min=-2, max=2, value=0),
r=widgets.FloatSlider(min=1, max=5, value=1)
)
### samotné zobrazenie
fig.show()